"""
定义二叉树节点结构，并实现根据列表创建二叉树的功能。
"""


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val  # 节点值
        self.left = left  # 左子节点
        self.right = right  # 右子节点


def create_binary_tree(arr):
    """根据列表创建二叉树（层序遍历方式）"""
    if not arr:
        return None
    # 创建根节点
    root = TreeNode(arr[0])
    # 使用队列存储待处理节点
    queue = [root]
    index = 1  # 当前处理的列表索引
    while queue and index < len(arr):
        # 取出队首节点
        current = queue.pop(0)
        # 处理左子节点
        if arr[index] is not None:
            current.left = TreeNode(arr[index])
            queue.append(current.left)
        index += 1
        # 处理右子节点（检查是否还有元素）
        if index < len(arr) and arr[index] is not None:
            current.right = TreeNode(arr[index])
            queue.append(current.right)
        index += 1
    return root


# 测试
# 列表表示：[1, 2, 3, None, 4, 5, None]
# 对应的树结构：
#       1
#      / \
#     2   3
#      \ /
#      4 5
root = create_binary_tree([1, 2, 3, None, 4, 5, None])
print(root.val)  # 输出: 1
print(root.left.val)  # 输出: 2
print(root.right.val)  # 输出: 3
print(root.left.right.val)  # 输出: 4
